|
|
|
|
Configuration: Windows XP Firefox 3.0.4
http://fr2.php.net/manual/fr/function.nl2br.php
<?php $message = "foo n'est pas\n bar"; echo nl2br($message); ?>Chez moi ça marche... |
Bien sûr, Chupa ! Chez moi aussi ça marche !
Mais je ne peux pas mettre ces guillemets doubles puisque je récupère le $message d'une base de données. Du coup, comment je le "convertis" en guillemets doubles ? J'ai essayé le truc débile et peu pro suivant : $message = " " . $message . " "; Mais évidemment ça marche pas. Merci en tout cas ! |
Bonsoir
Mais je ne peux pas mettre ces guillemets doubles puisque je récupère le $message d'une base de données. Si tu extrais tes données d'une base, elles sont directement dans une variable, pas entre guillemets simples ni entre guillemets doubles. Si tu as un problème avec nl2br($variable) après avoir récupéré $variable d'une base de données, c'est que tu as mal enregistré ton texte dans ta base de données. Comment traites-tu tes données pour les enregistrer ? |
Ah ! tu dois avoir raison, Toto.
Voici comment je fais : Je mets un formulaire : <form method="post" action="forum.php"> <p> Message : <textarea name="message" rows="8" cols="35"></textarea> <input type="submit" value="Envoyer" /> </p> </form> Puis je récupère les données : if (isset($_POST['message'])) { $message = mysql_real_escape_string(htmlspecialchars($_POST['message'])); // Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br /> : $message = nl2br($message); // Après je fais un certain nombre de vérifications (message pas vide, pas de répétition, etc.) // Puis j'enregistre DE CETTE FACON : mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "', '" . time() . "')"); Et c'est ICI que j'aimerais faire : echo nl2br($message); Ou plus exactement : mail('moi@moi.com', 'Objet', nb2lr($message)); Et ça ne marche pas. Donc je me rends compte que la BDD n'a rien à voir là-dedans, c'est par la méthode POST que je récupère mon $message. Merci ! |
Grosses bêtises (malheureusement archicourantes...
$message = mysql_real_escape_string(htmlspecialchars($_POST['message'])); // Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br /> : $message = nl2br($message); Après je fais un certain nombre de vérifications (message pas vide, pas de répétition, etc.) 1 - le mysql_real_escape_string ne devrait être fait que immédiatement avant d'enregistrer les données dans la base. Le résultat de cette fonction ne doit servir qu'à la requête mysql, pas à faire d'autres traitements comparaisons ou autres, car sinon ces traitements sont faits sur des messages modifiés. 2 - de même, le nl2br ne doit être appelé qu'au moment d'envoyer le texte à une page HTML (combiné avec htmlentities d'ailleurs) car il permet de transformer les sauts de ligne en "<br />" ce qui ne sert qu'au HTML, surtout pas à la base de données ni à l'envoi de mail (à moins que ton mail ait le mime type html). Si tu convertis les sauts de ligne en "<br />" avant d'enregistrer dans ta base de données, c'est "<br />" qui est enregistré et tu ne peux faire la conversion dans l'autre sens. Si tu la fais, tu convertiras aussi les <br /> que l'utilisateur aurait écrit. Le message que tu es en train de lire est un bon exemple : il ne mélange pas les <br /> que j'ai moi-même tapés en toutes lettres avec les sauts de ligne qui sont pourtant bien traduits en <br /> pour être affichés |
Merci infiniment Toto !
Je vais essayer de corriger mes bêtises et je reviens. |
En résumé :
if (isset($_POST['message']))
{
$message =$_POST['message'];
// il faut peut-être un stripslashes ici - dépend de la configuration du serveur
// Après je fais un certain nombre de vérifications (message pas vide, pas de répétition, etc.)
// Puis j'enregistre DE CETTE FACON :
mysql_query("INSERT INTO livreor VALUES('', '" . mysql_escape_string($pseudo) . "', '" . mysql_escape_string($message) . "', '" . time() . "')");
Et c'est ICI que j'aimerais faire :
echo nl2br(htmlentities($message));
Ou plus exactement :
mail('moi@moi.com', 'Objet', $message); // si mail en texte simple
mail('moi@moi.com', 'Objet',nl2br(htmlentities($message))); // si html
|
Merveilleux !
Tout fonctionne maintenant ! Un grand merci à toi, Toto ! |
Résultats pour Convertir guillemets simples en doubles
Résultats pour Convertir guillemets simples en doubles
Résultats pour Convertir guillemets simples en doubles
Résultats pour Convertir guillemets simples en doubles
Résultats pour Convertir guillemets simples en doubles
Résultats pour Convertir guillemets simples en doubles